﻿using IQReportes.Models.Logica;
using IQReportes.Utils;
using IQReportes.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace IQReportes.Controllers
{
    /// <summary>
    /// controller para perfil
    /// </summary>
    public class PerfilController : Controller
    {
        /// <summary>
        /// lógica perfil
        /// </summary>
        LogicaPerfil logicaPerfil = new LogicaPerfil();
        /// <summary>
        /// lógica usuario
        /// </summary>
        LogicaUsuario logicaUsuario = new LogicaUsuario();
        /// <summary>
        /// index
        /// </summary>
        /// <returns>vista de lista de perfiles</returns>
        public ActionResult Index()
        {
            if (!UsuarioController.usuarioConectado())
            {
                (new UsuarioController()).Logout();
            }
            if (!logicaUsuario.esAdministrador())
            {
                return RedirectToAction(Constantes.ACTIONINDEX, Constantes.CONTROLLERINDEX);
            }
            List <PerfilViewModel> perfiles = logicaPerfil.getListPerfilesPagina(1);
            ViewBag.pagina = 1;
            ViewBag.numPaginas = LogicaPerfil.cantPerfiles;
            return View("Index", perfiles);
        }
        /// <summary>
        /// obtener página de lista de perfiles
        /// </summary>
        /// <param name="pagina">número de página</param>
        /// <returns>vista de perfiles paginada</returns>
        public ActionResult Paginar(int pagina)
        {
            if (!UsuarioController.usuarioConectado())
            {
                (new UsuarioController()).Logout();
            }
            if (!logicaUsuario.esAdministrador())
            {
                return RedirectToAction(Constantes.ACTIONINDEX, Constantes.CONTROLLERINDEX);
            }
            ViewBag.pagina = pagina;
            List<PerfilViewModel> perfiles = logicaPerfil.getListPerfilesPagina(pagina);
            ViewBag.numPaginas = LogicaPerfil.cantPerfiles;
            return View("Index", perfiles);
        }
        /// <summary>
        /// editar perfil seleccionado
        /// </summary>
        /// <param name="id">id de perfil a editar</param>
        /// <returns>vista de perfil a editar</returns>
        public ActionResult Editar(string id)
        {
            if (!UsuarioController.usuarioConectado())
            {
                (new UsuarioController()).Logout();
            }
            if (!logicaUsuario.esAdministrador())
            {
                return RedirectToAction(Constantes.ACTIONINDEX, Constantes.CONTROLLERINDEX);
            }
            return View("Editar",logicaPerfil.getPerfilById(id));
        }
        /// <summary>
        /// editar con datos recibidos el perfil seleccionado
        /// </summary>
        /// <param name="perfil">datos de perfil</param>
        /// <returns>vista con datos actualizados</returns>
        [HttpPost]
        public ActionResult Editar(PerfilViewModel perfil)
        {
            if (!UsuarioController.usuarioConectado())
            {
                (new UsuarioController()).Logout();
            }
            if (ModelState.IsValid)
            {
                logicaPerfil.actualizarPerfil(perfil);
                return RedirectToAction("Index");
            }
            return View("Editar", perfil);
        }
        /// <summary>
        /// eliminar perfil seleccionado
        /// </summary>
        /// <param name="id">id de perfil seleccionado</param>
        /// <returns>vista de lista de perfiles actualizados</returns>
        public ActionResult Eliminar(string id)
        {
            if (!UsuarioController.usuarioConectado())
            {
                (new UsuarioController()).Logout();
            }
            if (!logicaUsuario.esAdministrador())
            {
                return RedirectToAction(Constantes.ACTIONINDEX, Constantes.CONTROLLERINDEX);
            }
            logicaPerfil.eliminarPerfil(id);
            return RedirectToAction("Index");
        }
        /// <summary>
        /// crear nuevo perfil
        /// </summary>
        /// <returns>vista para crear nuevo perfil</returns>
        public ActionResult Crear()
        {
            if (!UsuarioController.usuarioConectado())
            {
                (new UsuarioController()).Logout();
            }
            if (!logicaUsuario.esAdministrador())
            {
                return RedirectToAction(Constantes.ACTIONINDEX, Constantes.CONTROLLERINDEX);
            }
            return View("Crear",new PerfilViewModel());
        }
        /// <summary>
        /// crear nuevo perfil a partir de datos recibidos
        /// </summary>
        /// <param name="perfil">datos de perfil a crear</param>
        /// <returns>vista con datos de perfil actualizado</returns>
        [HttpPost]
        public ActionResult Crear(PerfilViewModel perfil)
        {
            if (!UsuarioController.usuarioConectado())
            {
                (new UsuarioController()).Logout();
            }
            if (ModelState.IsValid)
            {
                logicaPerfil.crearPerfil(perfil);
                return RedirectToAction("Index");
            }
            return View("Crear", perfil);
        }
    }
}
